Challenges exist in scheduling multiple concurrent MapReduce jobs while respecting constraints due to priority classes. Existing approaches to scheduling MapReduce work have not considered the notion of priority classes. Yet, the notion of priority classes is an entirely natural one. As an example, it might be that work in an “operations” class would be more important than work in an “analysts” class, which would be, in turn, more important than work in a “capability development” class. Further, these priority classes may be preemptive or non-preemptive in nature, or even a hybrid combination of both. There does exist at least one MapReduce scheduler which can optimize towards one of a multiplicity of several standard metrics. However, existing MapReduce scheduler approaches cannot optimize towards one of the standard metrics while simultaneously respecting the relative importance of priority classes.